This generator is a synthesizer, with the following features...
A feature that some people may find novel is that this machine actually uses note-off commands. I may add some more precise timing controls to a future machine, but I find using note-offs much more convenient than providing calculated durations for every note.
However, if the sustain level is set to zero, and the release rate is set the same as the decay rate, there is no need to worry about note-off commands.
Nothing major, no compatability issues, but fewer irritations.
This machine does not have any global parameters.
The track parameters are...
A property sheet will be displayed, which has three pages...
Of the commonly known simple waveforms, the only one that has even harmonics is the ramp (sometimes called sawtooth). While waveforms without even harmonics are useful, they often sound beepy or obviously synthesized, no matter how much they are processed - both string and brass acoustic instruments definitely produce even harmonics, and I'm sure this is pretty normal for real instruments.
If you find the ramp waveform too harsh, try 'Altered Bumps 2', 'Double Bumps 2' or 'Double Triangle 2' instead - and don't forget to play with the fractal settings.
Finally, if the Twin note is enabled using the checkbox it is always calculated, even if its amplitude is zero. The only effect in this case is to halve the amplitude of the main note. Using a twin note almost doubles the CPU usage, so turn it off if you can't hear the difference.
Waveform centre modulation basically distorts a waveform such that the normal centre point is reached slightly earlier or slightly later than normal. In the case where the original waveform is a square this gives pulse width modulation. The advantage is simply that it can be applied to any waveform.
The parameters on the dialog are not meant to be edited during a live performance. There should be no possibility of a crash, so you can adjust the parameters while a tune is playing to get the sound you want, but there is no attempt to avoid clicks or other strange effects.
Command : 01 Byte Param 1 : Program ID
Command : 80 Byte Param 1 : Waveform ID
Command : 81 Byte Param 1 : Fractal Depth Word Param 1 : Fractal Effect Low Word Param 2 : Fractal Effect High
Command : 82 Word Param 1 : Attack Word Param 2 : Decay Word Param 3 : Sustain Word Param 4 : Release
Command : 83 Word Param 1 : Pitch Bend Rate
Command : 84 Byte Param 1 : Enable Twin Note Byte Param 2 : Apply Fractal Before Mixing Word Param 1 : Detune - not yet implemented Word Param 2 : Twin Note Amplitude
Command : 85 Byte Param 1 : Enable on Main Note Byte Param 2 : Enable on Twin Note
Command : 86 Byte Param 1 : Enable Frequency Modulation Word Param 1 : Modulation Level
Command : 87 Byte Param 1 : Enable Amplitude Modulation Word Param 1 : Modulation Level
Command : 88 Byte Param 1 : Enable Pulse Width Modulation Word Param 1 : Modulation Level
Most controls for this machine are fairly self-explanatory, or at least fairly standard. The fractal distortion, however, is my own invention and some explanation is in order.
The fractal distortion uses an iterative function. That is, once you get the result of the function, you feed it back in again. It is heavily based on an equation for modelling population fluctuations that was first documented in ôSimple Mathematical Models with Very Complicated Dynamicsö (Nature, No. 26, 1976), by R. M. May.
A sound signal has very little to do with population fluctuations, so I designed a cubic function to use instead. As with the May equation, there is a parameter that controls how 'chaotic' it is. I have called this the fractal effect. In addition, the fractal depth is the number of times the function is applied (the equivalent of the number of generations ahead to predict in the May equation).
When the fractal depth is set to zero, or the fractal effect is set to one, the function has no effect on the input signal. If the fractal depth is zero, the fractal is never called.
When the fractal effect is set to a high sufficiently high value, the function becomes chaotic. With a sufficiently high fractal depth, it is quite simple to produce white noise. With more moderate values for the effect and depth parameters, the fractal distortion will add moderate levels of high harmonics.
The reason there are two 'fractal effect' controls is simply that the fractal effect is varied as the note is played. The effect value actually used will be between the 'high' effect and the 'low' effect, depending on the current envelope level.
Finally, there is a checkbox in the 'Twin Note' group which allows the fractal to be applied either before or after the twin note is mixed in with the original note. If the fractal is applied before the mixing, then it needs to be calculated separately for both the original and the twin note. Unfortunately, this is normally necessary - applying the fractal after mixing gives a rather odd effect. I left it in as an option in case someone really needs an odd effect.
I have created a small DLL which provides an additional means of communication between machines. It uses similar principles to AuxBus, but instead of communication signals it allow commands to be sent between machines.
The command format is based on the kinds of things that can be done in the pattern editor, and the main way of sending these commands will be using a machine that stores these commands in its pattern editor - Ninereeds Broadcast.
The inspiration was a recent message to the buzz developers mailing list, which suggested the possibility of a tune reacting to externally generated events - specifically, to locations and situations in a game.
The end result supports a number of requirements...